package com.cn.wanxi.thread.phone;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 手机100部
 */
public class MyPhone implements Runnable {
    //    手机的数量
    private int phoneNum = 100;

    @Override
    public void run() {
//        既然有些商家进来了，还没有来得及出去，可以给商家一定的等待时间

//        因为我们不知道什么时候预定完，所以需要设定一个条件退出
        while (true) {
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            能不能做一个方法？让一个商家拿完货以后，提示给另一个商家，
//            同步，理解为永远只有一个人去执行,这种情况下，不好，那么就成了单线程

//            这里可以利用同步来做
//            同步锁，可以锁方法，也可以锁对象
//        锁方法是按照顺序执行，而锁代码 就是按照抢占CPU的资源执行
//            synchronized ("aa") {
//            手动锁相比较于自动锁，灵活
            Lock lock = new ReentrantLock();//对不同的runable传入同一个lock
            lock.lock();
            if (phoneNum > 0) {
                System.out.println(Thread.currentThread().getName() + "卖出了一部手机，还剩余" + --phoneNum + "部手机");
            } else {
                System.out.println("很遗憾，手机已经全部预定完，请下次再来");
                return;
            }
            lock.unlock();
//            }
//            System.out.println(111);

        }

    }
}